package com.common.www.bean.entity.programme;


import org.springframework.boot.base.jpa.domain.annotations.QueryCacheable;
import org.springframework.boot.base.jpa.domain.entity.NumberIdentityEntity;
import com.common.www.bean.entity.project.Project;
import com.common.www.bean.entity.project.SupplyCompany;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import io.swagger.annotations.ApiModel;
import lombok.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.hibernate.validator.constraints.Length;

import javax.persistence.*;
import java.math.BigDecimal;

/**
 * 沉淀分析数据--到定标
 *
 * @param
 * @author andyliu
 * @date 5/28/2018 4:23 PM
 * @return
 */
@DynamicUpdate(true)
@DynamicInsert(true)
@Entity
@Getter
@Setter
@QueryCacheable
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table()
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel(value = "沉淀分析数据--到定标")
@JsonIgnoreProperties(ignoreUnknown=true)
public class PrecipitateDb extends NumberIdentityEntity {

    /**
     * 项目
     */
    @JsonIgnoreProperties(value = {""})
    @ManyToOne()
    private Project project;
    /**
     * 供应公司(为标底或实施标底时无公司)
     */
    @JsonIgnoreProperties(value = {""})
    @ManyToOne()
    private SupplyCompany supplyCompany;

    /**
     * 沉淀分类：1.外线合同总单方  2.内线合同总单方-建面  3.内线合同总单方-负荷  4.高压柜
     *  5.低压柜-住宅  6.低压柜-非居  7.低压柜-商业  8.低压柜-充电柱  9.低压柜-合计
     *  10.变压器-住宅  11.变压器-非居  12.变压器-商业  13.变压器-充电柱  14.变压器-合计
     *  15.电表-住宅  16.电表-非居  17.电表-商业  18.电表-充电柱  19.电表-合计
     *  20.电表箱-住宅  21.电表箱-非居  22.电表箱-商业  23.电表箱-充电柱  24.电表箱-合计
     *  25.低压电缆-住宅  26.低压电缆-非居  27.低压电缆-商业  28.低压电缆-充电柱  29.低压电缆-合计
     *  30.母线槽  31.高压电缆  32.配电箱  33.调试费  34.手续费  35.其他
     * 分析分类为：变压器、低压柜、调试、高压电缆、高压柜、其他、手续费、低压电缆、配电箱、电表、电表箱、母线槽；在这里不再将电表、电表箱合并为户表
     */
    @Column(length = 11)
    private Integer fenXiType;

    /**
     * 标底A（标底）
     * --标底价(元)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal basePriceA;
//    /**
//     * 标底A（标底）
//     * --标底价调整(元)
//     */
//    @Column(length = 11, precision = 12, scale = 4)
//    private BigDecimal basePriceAtz;
//    /**
//     * 标底A（标底）
//     * --标底调整差异(万)
//     */
//    @Column(length = 11, precision = 12, scale = 4)
//    private BigDecimal basePriceAtzcy;
//    /**
//     * 标底A（标底）
//     * --差异说明
//     */
//    @Column(length = 256)
//    private String basePriceAcysm;
    /**
     * 标底A（标底）
     * --建面单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal basePriceAjm;
//    /**
//     * 标底A（标底）
//     * --调整标底价建面单方(元/㎡)
//     */
//    @Column(length = 11, precision = 12, scale = 4)
//    private BigDecimal basePriceAtzjm;
    /**
     * 标底A（标底）
     * --关键单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal basePriceAgj;

    /**
     * 定标价B（定标）
     * --定标价(元)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal dingBiaoPriceB;
    /**
     * 定标价B（定标）
     * --建面单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal dingBiaoPriceBjm;
    /**
     * 定标价B（定标）
     * --关键单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal dingBiaoPriceBgj;

    /**
     * 同城市历史项目数据C   项目
     */
    @JsonIgnoreProperties(value = {""})
    @ManyToOne()
    private Project choiceProject;
    /**
     * 同城市历史项目数据C  供应公司
     */
    @JsonIgnoreProperties(value = {""})
    @ManyToOne()
    private SupplyCompany choiceSupplyCompany;
    /**
     * 对应工商在哪个阶段的清单数据(4、8)
     */
    @Column(length = 11)
    private Integer choiceJieDuan;
    /**
     * 同城市历史项目数据C
     * --实施方案（审核价）(元)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal choiceBasePriceC;
    /**
     * 同城市历史项目数据C
     * --建面单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal choiceBasePriceCjm;
    /**
     * 同城市历史项目数据C
     * --关键单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal choiceBasePriceCgj;

//    /**
//     * 拟定标-标底差异  B-A
//     * --金额（万元）
//     */
//    @Column(length = 11, precision = 12, scale = 4)
//    private BigDecimal baPrice;
    /**
     * 拟定标-标底差异  B-A
     *  --建面单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal baPriceJm;
    /**
     * 拟定标-标底差异  B-A
     *  --差异说明
     */
    @Column(length = 256)
    private String baPriceCysm;

//    /**
//     * 拟定标-同城市历史项目差异  B-C
//     * --金额（万元）
//     */
//    @Column(length = 11, precision = 12, scale = 4)
//    private BigDecimal dcPrice;
    /**
     * 拟定标-同城市历史项目差异   B-C
     *  --建面单方(元/㎡)
     */
    @Column(length = 11, precision = 12, scale = 4)
    private BigDecimal bcPriceJm;
    /**
     * 拟定标-同城市历史项目差异   B-C
     *  --差异说明
     */
    @Column(length = 256)
    private String bcPriceCysm;
    /**
     * 备注
     */
    @Column(length = 4096)
    @Length(max=4096,message = "备注最长不超过4096位")
    private String remarks;

    @Transient
    private String fenXiTypeName;

    public String getFenXiTypeName() {
        if (fenXiType == null) {
            return null;
        }
        switch (fenXiType) {
            case 1:
                return "外线合同总单方";
            case 2:
                return "内线合同总单方-建面";
            case 3:
                return "内线合同总单方-负荷";
            case 4:
                return "高压柜";
            case 5:
                return "低压柜-住宅";
            case 6:
                return "低压柜-非居";
            case 7:
                return "低压柜-商业";
            case 8:
                return "低压柜-充电柱";
            case 9:
                return "低压柜-合计";
            case 10:
                return "变压器-住宅";
            case 11:
                return "变压器-非居";
            case 12:
                return "变压器-商业";
            case 13:
                return "变压器-充电柱";
            case 14:
                return "变压器-合计";
            case 15:
                return "电表-住宅";
            case 16:
                return "电表-非居";
            case 17:
                return "电表-商业";
            case 18:
                return "电表-充电柱";
            case 19:
                return "电表-合计";
            case 20:
                return "电表箱-住宅";
            case 21:
                return "电表箱-非居";
            case 22:
                return "电表箱-商业";
            case 23:
                return "电表箱-充电柱";
            case 24:
                return "电表箱-合计";
            case 25:
                return "低压电缆-住宅";
            case 26:
                return "低压电缆-非居";
            case 27:
                return "低压电缆-商业";
            case 28:
                return "低压电缆-充电柱";
            case 29:
                return "低压电缆-合计";
            case 30:
                return "母线槽";
            case 31:
                return "高压电缆";
            case 32:
                return "配电箱";
            case 33:
                return "调试费";
            case 34:
                return "手续费";
            case 35:
                return "其他";
        }
        return "未知";
    }



}